package com.xxxx.crm.service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xxxx.crm.base.BaseService;
import com.xxxx.crm.dao.CustomerLinkmanMapper;
import com.xxxx.crm.dao.CustomerMapper;
import com.xxxx.crm.query.CustomerOrderQuery;
import com.xxxx.crm.utils.AssertUtil;
import com.xxxx.crm.utils.PhoneUtil;
import com.xxxx.crm.vo.CustomerLinkman;
import com.xxxx.crm.vo.CustomerOrder;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Service
public class CustomerLinkmanService extends BaseService<CustomerLinkman, Integer> {
    @Resource
    private CustomerLinkmanMapper customerLinkmanMapper;
    @Resource
    private CustomerMapper customerMapper;

    /**
     * 多条件分页查询客户 （返回的数据格式必须满足LayUi中数据表格要求的格式）
     */
    public Map<String, Object> queryCustomerLinkmanByParams(CustomerOrderQuery customerLinkmanQuery) {
        Map<String, Object> map = new HashMap<>();

        // 开启分页
        PageHelper.startPage(customerLinkmanQuery.getPage(), customerLinkmanQuery.getLimit());
        // 得到对应分页对象
        PageInfo<CustomerLinkman> pageInfo = new PageInfo<>(customerLinkmanMapper.selectByParams(customerLinkmanQuery));

        // 设置map对象
        map.put("code",0);
        map.put("msg","success");
        map.put("count",pageInfo.getTotal());
        // 设置分页好的列表
        map.put("data",pageInfo.getList());

        return map;
    }

    /***
     * 添加订单信息数据
     *  1. 参数校验
     *      客户ID   非空，数据存在
     *      姓名   非空
     *      性别     非空
     *      电话     非空
     *      电话     手机号码格式正确
     *  2. 设置参数的默认值
     *      是否有效    默认有效
     *      创建时间    系统当前时间
     *      修改时间    系统当前时间
     *  3. 执行添加操作，判断受影响的行数
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public void addCustomerLinkman(CustomerLinkman customerLinkman) {
        checkCustomerLinkman(customerLinkman);

        customerLinkman.setIsValid(1);
        customerLinkman.setCreateDate(new Date());
        customerLinkman.setUpdateDate(new Date());

        AssertUtil.isTrue(insertSelective(customerLinkman) != 1, "联系人信息添加失败！");
    }

    /**
     *  参数校验
     *      客户ID   非空，数据存在
     *      姓名   非空
     *      性别     非空
     *      电话     非空
     *      电话     手机号码格式正确
     */
    private void checkCustomerLinkman(CustomerLinkman customerLinkman) {
        Integer cId = customerLinkman.getCusId();
        AssertUtil.isTrue(null == cId || customerMapper.selectByPrimaryKey(cId) == null,"请设置客户ID！");
        AssertUtil.isTrue(StringUtils.isBlank(customerLinkman.getLinkName()), "姓名不能为空！");
        AssertUtil.isTrue(StringUtils.isBlank(customerLinkman.getSex()), "性别不能为空！");
        AssertUtil.isTrue(StringUtils.isBlank(customerLinkman.getPhone()), "电话不能为空！");
        AssertUtil.isTrue(!PhoneUtil.isMobile(customerLinkman.getPhone()),"联系号码格式不正确");
    }


    /**
     * 更新客户开发计划项数据
     *  1. 参数校验
     *      联系人ID     非空，数据存在
     *      客户ID   非空，数据存在
     *      姓名   非空
     *      性别     非空
     *      电话     非空
     *      电话     手机号码格式正确
     *  2. 设置参数的默认值
     *      修改时间    系统当前时间
     *  3. 执行更新操作，判断受影响的行数
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public void updateCustomerLinkman(CustomerLinkman customerLinkman){

        AssertUtil.isTrue(null == customerLinkman.getId() || selectByPrimaryKey(customerLinkman.getId()) == null, "待更新的记录不存在！");
        checkCustomerLinkman(customerLinkman);
        customerLinkman.setUpdateDate(new Date());
        AssertUtil.isTrue(updateByPrimaryKeySelective(customerLinkman) != 1, "联系人信息更新失败！");
    }

    /**
     * 删除联系人（多）
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public void deleteCustomerLinkman(Integer[] ids) {
        // 判断ID是否为空
        AssertUtil.isTrue(null == ids || ids.length < 1, "待删除记录不存在！");
        // 执行删除（更新）操作，判断受影响的行数
        AssertUtil.isTrue(customerLinkmanMapper.deleteBatch(ids) != ids.length, "联系人数据删除失败！");
    }
}
